package com.hsgene.order.persistence;

import com.hsgene.order.domain.v1.GeneticTestingOrderPackage;
import com.hsgene.order.domain.v1.GeneticTestingOrderPackageDetail;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 基因检测订单套餐关联Repository
 *
 * @author wangbing
 * @version 1.0, 2018/8/3
 */
@Repository
public interface OrderPackageRepository {

    /**
     * 查询订单下关联的套餐
     *
     * @param orderId 订单id
     * @return 关联的套餐
     */
    List<GeneticTestingOrderPackage> queryOrderPackages(@Param("orderId") String orderId);

    /**
     * 查询订单下关联的套餐详情
     *
     * @param orderId   订单id
     * @param packageId 套餐id
     * @return 套餐详情
     */
    GeneticTestingOrderPackageDetail findOrderPackageDetail(
            @Param("orderId") String orderId,
            @Param("packageId") String packageId);

    /**
     * 查询订单下关联的套餐
     *
     * @param orderId   订单id
     * @param packageId 套餐id
     * @return 套餐信息
     */
    GeneticTestingOrderPackage findOrderPackage(
            @Param("orderId") String orderId,
            @Param("packageId") String packageId);

    /**
     * 根据报告名称查询检测报告
     *
     * @param doctorId   医生id
     * @param reportName 报告名称
     * @return 检测报告
     */
    GeneticTestingOrderPackageDetail queryOrderPackageReport(
            @Param("doctorId") String doctorId,
            @Param("reportName") String reportName);

    /**
     * 更新订单套餐信息（套餐更换补寄等信息更新）
     *
     * @param newPackage 新订单套餐信息
     */
    void updateForInterchange(@Param("newPackage") GeneticTestingOrderPackage newPackage);

    /**
     * 更新订单套餐信息（套餐退款信息更新）
     *
     * @param refundPackage 新订单套餐信息
     */
    void updateForRefund(@Param("refundPackage") GeneticTestingOrderPackage refundPackage);

    /**
     * 更新订单套餐信息（订单套餐检测超期）
     *
     * @param postponePackage
     */
    void updateForPostpone(@Param("postponePackage") GeneticTestingOrderPackage postponePackage);
}
